import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:live_music/components/feedback/PageFeedBack.dart';
import 'package:live_music/components/index/momentCard.dart';
import 'package:live_music/models/moment_detail_model.dart';
import 'package:live_music/models/moment_list_model.dart';
import 'package:live_music/services/indexService.dart';

class FollowIndex extends StatefulWidget {
  FollowIndex({Key key}) : super(key: key);

  @override
  _FollowIndexState createState() => _FollowIndexState();
}

class _FollowIndexState extends State<FollowIndex>
    with AutomaticKeepAliveClientMixin {
  // 下拉刷新控制器
  EasyRefreshController _easyRefreshController;
  // 独立的滚动视图 防止tab切换时触发下拉刷新
  ScrollController _scrollController;
  // 列表数组模型
  List<MomentDetailModel> _momentListModel;
  int pageNo = 1;
  int pageSize = 20;
  bool hasMore = true;
  bool loading = true;
  bool error = false;
  String errorMsg;

  @override
  void initState() {
    super.initState();
    _easyRefreshController = EasyRefreshController();
    _scrollController = ScrollController();
    getData();
  }

  @override
  void dispose() {
    _easyRefreshController.dispose();
    _scrollController.dispose();
    super.dispose();
  }

  getData({bool replace = true}) async {
    try {
      Map<String, dynamic> data = {"pageNo": pageNo, "pageSize": pageSize};
      Map<String, dynamic> result = await IndexService.queryFriendMoment(data);
      List<dynamic> momentList = result['body'];
      MomentListModel momentListModel = MomentListModel.fromJson(momentList);
      setState(() {
        pageNo++;
        hasMore = pageSize == momentListModel.list.length;
        if (replace) {
          _momentListModel = momentListModel.list;
        } else {
          _momentListModel.addAll(momentListModel.list);
        }
      });
    } catch (e) {
      setState(() {
        error = true;
        errorMsg = e.toString();
      });
    } finally {
      setState(() {
        loading = false;
      });
    }
  }

  // 刷新回调(null为不开启刷新)
  Future _onRefresh() async {
    setState(() {
      pageNo = 1;
    });
    await getData(replace: true);
    if (error) {
      setState(() => error = false);
    }
    // 恢复刷新状态 使onLoad再次可用
    _easyRefreshController.resetLoadState();
  }

  // 加载回调(null为不开启加载)
  Future _onLoad() async {
    if (hasMore) {
      await getData(replace: false);
    }
    await Future.delayed(const Duration(seconds: 0), () {
      _easyRefreshController.finishLoad(success: true, noMore: !hasMore);
    });
  }

  @override
  Widget build(BuildContext context) {
    super.build(context);
    return EasyRefresh(
        firstRefresh: false,
        firstRefreshWidget: PageFeedBack(firstRefresh: true).build(),
        emptyWidget: PageFeedBack(
          loading: loading,
          error: error,
          empty: _momentListModel.isEmpty,
          errorMsg: errorMsg,
          onErrorTap: () => _easyRefreshController.callRefresh(),
          onEmptyTap: () => _easyRefreshController.callRefresh(),
        ).build(),
        header: PhoenixHeader(),
        footer: ClassicalFooter(),
        controller: _easyRefreshController,
        enableControlFinishRefresh: false,
        enableControlFinishLoad: true,
        onRefresh: _onRefresh,
        onLoad: _momentListModel.isEmpty ? null : _onLoad,
        child: ListView.builder(
            controller: _scrollController,
            itemCount: _momentListModel.length,
            itemBuilder: (BuildContext context, int index) {
              return Container(
                  color: Colors.white,
                  child: MomentCard(
                      momentListItem: _momentListModel[index], index: index));
            }));
  }

  @override
  bool get wantKeepAlive => true;
}
